package org.insightech.er.editor.controller.editpart.element;

import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
import org.insightech.er.editor.controller.editpart.element.connection.CommentConnectionEditPart;
import org.insightech.er.editor.controller.editpart.element.connection.RelationEditPart;
import org.insightech.er.editor.controller.editpart.element.node.CategoryEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ERTableEditPart;
import org.insightech.er.editor.controller.editpart.element.node.InsertedImageEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ModelPropertiesEditPart;
import org.insightech.er.editor.controller.editpart.element.node.NoteEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ViewEditPart;
import org.insightech.er.editor.controller.editpart.element.node.column.GroupColumnEditPart;
import org.insightech.er.editor.controller.editpart.element.node.column.NormalColumnEditPart;
import org.insightech.er.editor.controller.editpart.element.node.removed.RemovedERTableEditPart;
import org.insightech.er.editor.controller.editpart.element.node.removed.RemovedNoteEditPart;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.connection.CommentConnection;
import org.insightech.er.editor.model.diagram_contents.element.connection.Relation;
import org.insightech.er.editor.model.diagram_contents.element.node.category.Category;
import org.insightech.er.editor.model.diagram_contents.element.node.image.InsertedImage;
import org.insightech.er.editor.model.diagram_contents.element.node.model_properties.ModelProperties;
import org.insightech.er.editor.model.diagram_contents.element.node.note.Note;
import org.insightech.er.editor.model.diagram_contents.element.node.table.ERTable;
import org.insightech.er.editor.model.diagram_contents.element.node.table.column.NormalColumn;
import org.insightech.er.editor.model.diagram_contents.element.node.view.View;
import org.insightech.er.editor.model.diagram_contents.not_element.group.ColumnGroup;
import org.insightech.er.editor.model.tracking.RemovedERTable;
import org.insightech.er.editor.model.tracking.RemovedNote;

public class ERDiagramEditPartFactory implements EditPartFactory {

    public ERDiagramEditPartFactory() {}

    @Override
    public EditPart createEditPart(final EditPart context, final Object model) {
        EditPart editPart = null;

        if (model instanceof ERTable) {
            editPart = new ERTableEditPart();

        } else if (model instanceof View) {
            editPart = new ViewEditPart();

        } else if (model instanceof ERDiagram) {
            editPart = new ERDiagramEditPart();

        } else if (model instanceof Relation) {
            editPart = new RelationEditPart();

        } else if (model instanceof Note) {
            editPart = new NoteEditPart();

        } else if (model instanceof ModelProperties) {
            editPart = new ModelPropertiesEditPart();

        } else if (model instanceof CommentConnection) {
            editPart = new CommentConnectionEditPart();

        } else if (model instanceof Category) {
            editPart = new CategoryEditPart();

        } else if (model instanceof RemovedERTable) {
            editPart = new RemovedERTableEditPart();

        } else if (model instanceof RemovedNote) {
            editPart = new RemovedNoteEditPart();

        } else if (model instanceof NormalColumn) {
            editPart = new NormalColumnEditPart();

        } else if (model instanceof ColumnGroup) {
            editPart = new GroupColumnEditPart();

        } else if (model instanceof InsertedImage) {
            editPart = new InsertedImageEditPart();

        }

        if (editPart != null) {
            editPart.setModel(model);
        }

        return editPart;
    }
}
